/**************************************************************************
 
 类   名: CLMasonry   1.0.0
                     1.0.1  2017-05-17  10:27:13
 
 创建时间: 2015-6-1
 
 作   者: C-LOVE
 
 说   明: 代码约束
         基于Msaonry 的封装
 
 注   意:
 *      该文件是基于 Masonry 封装的一些操作
 *      使用时必须把 Masonry 导入工程中
 *
 *      有时候加了约束会崩溃，其中一个原因就是 视图没有加入到父视图里面，所以会造成奔溃  2015-09-28  11:53:54
 
 依赖文件: Masonry
 
 修改日志:
 
 
 最后修改时间:2015-09-28  11:53:59
            2017-05-16  10:58:14  进行备注说明
            2017-05-17  10:26:13  增加比例约束
 
 **************************************************************************/

#import <UIKit/UIKit.h>
#import "Masonry.h"

#define CLNIL  -1000.1      //定义值  当参数为1000时 代表需要对此方向进行限制

/// 约束方向枚举值
typedef enum : NSUInteger {
    
    /** 顶部-约束方向 */
    CLDirectionTop,
    
    /** 底部-约束方向 */
    CLDirectionBottom,
    
    /** 左边-约束方向 */
    CLDirectionLeft,
    
    /** 左边-约束方向 */
    CLDirectionRight
    
} CLDirection;


@interface CLMasonry : NSObject


/**
 * @abstract   视图约束
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             top,bottom,left,right,width,height 数值为 'CLNIL' 时表示不进行约束
 *
 * @param  view       需要约束的视图
 * @param  baseView   基视图(参照视图)
 * @param  top        顶部之间距离
 * @param  bottom     底部之间距离
 * @param  left       左边之间距离
 * @param  right      右边之间距离
 * @param  width      视图(需要约束的视图)宽度
 * @param  height     视图(需要约束的视图)高度
 */
+ (void)masonry:(UIView *)view
       baseView:(UIView *)baseView
            top:(CGFloat )top
         bottom:(CGFloat )bottom
           left:(CGFloat )left
          right:(CGFloat )right
          width:(CGFloat )width
         height:(CGFloat )height;

/**
 * @abstract   视图约束
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             top,bottom,left,right 数值为 'CLNIL' 时表示不进行约束
 *
 * @param  view       需要约束的视图
 * @param  baseView   基视图(参照视图)
 * @param  top        顶部之间距离
 * @param  bottom     底部之间距离
 * @param  left       左边之间距离
 * @param  right      右边之间距离
 */
+ (void)masonry:(UIView *)view
       baseView:(UIView *)baseView
            top:(CGFloat )top
         bottom:(CGFloat )bottom
           left:(CGFloat )left
           right:(CGFloat)right;

/**
 * @abstract   约束视图的宽度和高度
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             此函数只对视图的高度和宽度进行约束 width，height 的数值为'CLNIL'时表示不作约束
 *
 * @param  view    需要约束的视图
 * @param  width   视图宽度
 * @param  height  视图高度
 */
+ (void)widthAndHeightOfView:(UIView *)view
                       width:(CGFloat )width
                      height:(CGFloat )height;

/**
 * @abstract   视图约束顶部之间的距离
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             对视图之间(view, baseView)的顶部之间的距离约束。
 *
 * @param  view      需要约束的视图
 * @param  baseView  基视图(参照视图)
 * @param  top       顶部之间的距离
 */
+ (void)topDistance:(UIView *)view
           baseView:(UIView *)baseView
                top:(CGFloat )top;

/**
 * @abstract   视图约束底部之间的距离
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             对视图之间(view, baseView)的底部之间的距离约束。
 *
 * @param  view      需要约束的视图
 * @param  baseView  基视图(参照视图)
 * @param  bottom    底部之间的距离
 */
+ (void)bottomDistance:(UIView *)view
              baseView:(UIView *)baseView
                bottom:(CGFloat )bottom;

/**
 * @abstract   视图约束左边之间的距离
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             对视图之间(view, baseView)的左边之间的距离约束。
 *
 * @param  view      需要约束的视图
 * @param  baseView  基视图(参照视图)
 * @param  left      左边之间的距离
 */
+ (void)leftDistance:(UIView *)view
            baseView:(UIView *)baseView
                left:(CGFloat )left;

/**
 * @abstract   视图约束右边之间的距离
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             对视图之间(view, baseView)的右边之间的距离约束。
 *
 * @param  view      需要约束的视图
 * @param  baseView  基视图(参照视图)
 * @param  right     右边之间的距离
 */
+ (void)rightDistance:(UIView *)view
             baseView:(UIView *)baseView
                right:(CGFloat )right;

/**
 * @abstract   视图约束宽度
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             对视图宽度约束。
 *
 * @param  view   需要约束的视图
 * @param  width  视图宽度
 */
+ (void)widthOfView:(UIView *)view
              width:(CGFloat )width;

/**
 * @abstract   视图约束高度
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             对视图高度约束。
 *
 * @param  view   需要约束的视图
 * @param  height 视图高度
 */
+ (void)heightOfView:(UIView *)view
              height:(CGFloat )height;

/**
 * @abstract   对视图的一个方向进行约束
 *
 * @discussion 视图约束时视图必须先提前添加到相应的视图内(如果没有则可能会造成奔溃)
 *             需要约束的一个方向，与基视图的一个方向进行约束。
 *
 * @param  view           需要约束的视图
 * @param  viewDirection  需啊约束的视图的方向
 * @param  baseView       基视图(参照视图)
 * @param  baseVDirection 基视图的方向
 * @param  distance       约束的距离
 */
+ (void)masonry:(UIView *)view
      direction:(CLDirection)viewDirection
       baseView:(UIView *)baseView
      direction:(CLDirection)baseVDirection
       distance:(CGFloat )distance;


#pragma mark- ==== 约束相等(比例) =====

/**
 * @abstract   约束视图之间宽度相等
 *
 * @param  view     需要约束的视图
 * @param  baseView 基视图(参照视图)
 */
+ (void)widthEqual:(UIView *)view
          baseView:(UIView *)baseView;

/**
 * @abstract   按比例约束视图之间宽
 *
 * @param  view       需要约束的视图
 * @param  baseView   基视图(参照视图)
 * @param  multiplied 宽比例 (view.width : baseView.width)
 */
+ (void)widthEqual:(UIView *)view
          baseView:(UIView *)baseView
        multiplied:(CGFloat )multiplied;

/**
 * @abstract   约束视图之间高度相等
 *
 * @param  view     需要约束的视图
 * @param  baseView 基视图(参照视图)
 */
+ (void)heightEqual:(UIView *)view
           baseView:(UIView *)baseView;

/**
 * @abstract   按比例约束视图之间高
 *
 * @param  view       需要约束的视图
 * @param  baseView   基视图(参照视图)
 * @param  multiplied 高比例 (view.height : baseView.height)
 */
+ (void)heightEqual:(UIView *)view
           baseView:(UIView *)baseView
         multiplied:(CGFloat )multiplied;

/**
 * @abstract   约束视图之间高度和宽度都相等
 *
 * @param  view     需要约束的视图
 * @param  baseView 基视图(参照视图)
 */
+ (void)widthAndHeightEqual:(UIView *)view
                   baseView:(UIView *)baseView;

/**
 * @abstract   按比例约束视图之间高和宽
 *
 * @param  view             需要约束的视图
 * @param  baseView         基视图(参照视图)
 * @param  heightMultiplied 高度比例 (view.height : baseView.height)
 * @param  widthMultiplied  宽度比例 (view.width  : baseView.width )
 */
+ (void)widthAndHeightEqual:(UIView *)view
                   baseView:(UIView *)baseView
            widthMultiplied:(CGFloat )widthMultiplied
           heightMultiplied:(CGFloat )heightMultiplied;


@end























